<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// 注意1：要将use strict放置在程序的最上面
	// ### 语法和行为改变
	// * 必须用 var 声明变量，不允许使用未声明的变量
	
	// let a = 1;
	// console.log(a);
	// function fn(){
	// 	"use strict";
	// 	b=3;
	// }
	// fn();
	
	
	
	// * 禁止自定义的函数中的 this 指向 window
	// "use strict";
	// function fn(){
	// 	console.log(this);// undefined
	// }
	// fn();
	
	
	// * 创建 eval 作用域
	// "use strict";
	// eval("var a=1;var b=2;console.log(a+b)");
	// console.log(b-a);// ReferenceError: b is not defined
	
	// * 对象不能有重名的属性（Chrome 已经修复了这个 Bug，IE 还会出现）
	// "use strict";
	// var obj = {
	// 	a:1,
	// 	b:2,
	// 	c:3,
	// 	c:4
	// }
	// console.log(obj)
	
	
	
	// * 函数不能有重复的形参
	// "use strict";
	// function fn(a,b,c,c,d){
	// 	console.log(a,b,c,d);// 1 2 4 5
	// }
	// fn(1,2,3,4,5);
	
	
	// * 新增一些保留字, 如:interface  public
	// "use strict";
	// var private = 1;
	// console.log(private);
	
	// * 使用call,apply 传递的第一个参数为null 或 undefined 时，this值不会转换为全局对象
	"use strict";
	function fn(){
		console.log(this);
	}
	fn.call();
	fn.call(undefined);
	fn.call(null);
	fn.call(1);
</script>
</html>